package com.mall.common.result;

/**
 * 系统标准响应码枚举实现
 */
public enum ResultCode implements IResultCode {

    // 成功状态码（2xx）
    SUCCESS(200, "操作成功"),
    CREATED(201, "资源创建成功"),
    ACCEPTED(202, "请求已接受"),
    NO_CONTENT(204, "操作成功，无返回内容"),

    // 客户端错误（4xx）
    BAD_REQUEST(400, "请求参数错误"),
    UNAUTHORIZED(401, "未授权访问"),
    FORBIDDEN(403, "禁止访问"),
    NOT_FOUND(404, "资源未找到"),
    METHOD_NOT_ALLOWED(405, "请求方法不允许"),
    CONFLICT(409, "资源冲突"),
    GONE(410, "资源已不存在"),

    // 服务端错误（5xx）
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
    SERVICE_UNAVAILABLE(503, "服务不可用"),
    GATEWAY_TIMEOUT(504, "网关超时"),

    // 扩展业务状态码（根据实际需求添加）
    USER_NOT_EXIST(1001, "用户不存在"),
    BALANCE_NOT_ENOUGH(1002, "余额不足"),
    ORDER_EXPIRED(1003, "订单已过期"),
    ROLE_NOT_EXIST(1001, "角色不存在"),
    ROLE_PERMISSION_NOT_MODIFY(1001, "系统角色权限不能修改"),
    DATA_NOT_EXISTED(1001, "数据不存在"),
    DATA_ALREADY_EXISTED(1001, "配置键已存在");

    private final int code;
    private final String message;

    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }

    /**
     * 根据状态码查找对应的枚举
     *
     * @param code 状态码值
     * @return 匹配的枚举项，找不到时返回null
     */
    public static ResultCode ofCode(int code) {
        for (ResultCode status : ResultCode.values()) {
            if (status.getCode() == code) {
                return status;
            }
        }
        return null;
    }
}
